package it.unipd.dei.bd.icineasti.servlet.admin;

import it.unipd.dei.bd.icineasti.servlet.AbstractDatabaseServlet;

import it.unipd.dei.bd.icineasti.database.CreateSalaDatabase;
import it.unipd.dei.bd.icineasti.database.CreatePoltroneDatabase;
import it.unipd.dei.bd.icineasti.resource.Sala;
import it.unipd.dei.bd.icineasti.resource.Poltrona;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Riceve tutti i parametri necessari per identificare una sala
 * e la inserisce nel database. Come risultato dell'inserimento
 * riceve l'id della sala e lo usa per inserire nel db le poltrone
 * relative alla sala stessa.
 * 
 * Riceve le poltrone come elenco CSV di fila-numero del tipo:
 * "A1,B15,C3"
 * effettua il parsing e genera una lista di poltrone per la sala.
 * 
 * @author Bardelle Renzo
 * @version 1.00
 */

public class CreateSalaServlet extends AbstractDatabaseServlet {

	public void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		
		HttpSession session = req.getSession(true);
		
		res.setContentType("text/html");

		PrintWriter out = res.getWriter();

		Connection con = null;
		
		if(session.getAttribute("amministrativo") != null )
		{
			Sala sala=new Sala(
					req.getParameter("sigla"),
					req.getParameter("nome"),
					Integer.parseInt(req.getParameter("totaleposti")),
					Integer.parseInt(req.getParameter("codicesede")),
					-1
			);
		
			ArrayList<Poltrona> poltrone = new ArrayList<Poltrona>();
			
			String csvPoltrone = req.getParameter("csvpoltrone");
			
			String[] poltroneFilaNumero = csvPoltrone.split(",");
		
			for(int i=0;i<poltroneFilaNumero.length;i++)
				poltrone.add(new Poltrona(-1,poltroneFilaNumero[i].charAt(0)+"",Integer.parseInt(poltroneFilaNumero[i].substring(1)),true,-1));
						
			int assignedIdSala = -1;
			
			try {
				con = DS.getConnection();

				assignedIdSala = new CreateSalaDatabase(con, sala).createSala();
				
				out.println("<p><font color=\"green\" size=\"+2\">Nuova sala creata con successo!</font></p>");
				
			} catch (NullPointerException ex) {
				out.printf("<p><font color=\"red\" size=\"+2\">Impossibile creare la connessione al database nella creazione della sala.</font></p>");
			} catch (SQLException ex) {
				out.printf(
						"<p><font color=\"red\" size=\"+2\">Errore durante l'accesso al database nella creazione della sala: %s</font></p>",
						ex.getMessage());
			}
			
			if(assignedIdSala != -1)
				try {
					con = DS.getConnection();

					new CreatePoltroneDatabase(con, assignedIdSala, poltrone).createPoltrone();
					
					out.println("<p><font color=\"green\" size=\"+2\">Poltrone create con successo!</font></p>");
					
				} catch (NullPointerException ex) {
					out.printf("<p><font color=\"red\" size=\"+2\">Impossibile creare la connessione al database nella creazione delle poltrone.</font></p>");
				} catch (SQLException ex) {
					out.printf(
							"<p><font color=\"red\" size=\"+2\">Errore durante l'accesso al database nella creazione delle poltrone: %s</font></p>",
							ex.getMessage());
				}
		}
		else
		{
			out.println("<p><font color=\"red\" size=\"+2\">Non hai i privilegi di amministrazione quindi non puoi modificare il database.</font></p>");
			out.flush();
			out.close();
		}
	}
}
